package com.doit.day06

/**
 * 视图限定，限定的是什么：
 * 限定的这个类型是：可以将这个类型转变成你限定的对象，那么这个类型就可以往里面传
 * Bird1==》 将类型转换成你限定的bird1对象
 * 写一个隐式方法，隐式类可不可以？也可以啊
 *
 * implicit def aaa(你想传进去的类型){
 *   new Bird1 对象
 * }
 *
 * T <% Bird1
 */
object _10_视图限定 {
  def main(args: Array[String]): Unit = {

    class FuBird{
      def wenxing()={println("多吃点")}
    }

    class Bird1(val name:String) extends FuBird {
      def fly()={println(name + "飞走了")}
    }

    class ToyBird1

    //试图限定  <%
    def bitBird[T <% Bird1](b:T) = b.wenxing()

    bitBird[Bird1](new Bird1("小鸟"))

    //想要让一个类型拥有Brid1这个类中的fly方法
    implicit def aaa(toyBird1:ToyBird1)={
      new Bird1("aaa")
    }

    bitBird[ToyBird1](new ToyBird1)
    //现在传进去的类型,就是必须要可以调用Bird类中的fly方法，那么这个类型才能被传进去



    /* implicit def toy2Bird(toyBird: ToyBird1)= new Bird1("玩具鸟")

     bitBird[ToyBird1](new ToyBird1)*/
  }

}
